home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Developer Helper 1: Phil & Dave's Excellent CD
/
Excellent CD HFS.raw
/
Moof
/
Goodies
/
HyperCard Goodies
/
HyperCard Dev. ToolKit
/
Serial & MacinTalk XCMDs
/
sendPort.p
< prev
next >
Wrap
Text File
|
1987-07-15
|
2KB
|
93 lines
{$R-}
(*
sendSPort portNumber, addLFs, string -- Send a string to the serial port driver.
To compile and link this file using Macintosh Programmer's Workshop,
pascal -w sendPort.p
link -m ENTRYPOINT -o HyperCommands -rt XCMD=2 -sn Main=sendSPort sendPort.p.o "{MPW}"Libraries:interface.o
*)
{$S sendSPort } { Segment name must be the same as the command name. }
unit DummyUnit;
interface
uses MemTypes, QuickDraw, OSIntf, HyperXCmd;
procedure EntryPoint(paramPtr: XCmdPtr);
implementation
const
return = 13;
linefeed = 10;
type
Str31 = String[31];
procedure sendSPort(paramPtr: XCmdPtr); forward;
procedure EntryPoint(paramPtr: XCmdPtr);
begin
sendSPort(paramPtr);
end;
procedure sendSPort(paramPtr: XCmdPtr);
var portNumber: integer;
outPort: integer;
sendLFs: boolean;
str: Str255;
p: Ptr;
l: longInt;
linefeedByte: SignedByte;
{$I XCmdGlue.inc}
procedure Fail(errMsg: Str255); { set theResult and quit }
begin
paramPtr^.returnValue := PasToZero(errMsg);
exit(sendSPort);
end;
begin
if paramPtr^.paramCount <> 3 then Fail('parameter count is not 3');
ZeroToPas(paramPtr^.params[1]^,str); { First parameter is port number. }
portNumber := StrToNum(str);
if (portNumber < 1) or (portNumber > 2) then Fail('invalid port number');
ZeroToPas(paramPtr^.params[2]^,str); { Third parameter is whether to wait. }
sendLFs := false;
if length(str) > 0 then
if (str[1] = 't') or (str[1] = 'T') then sendLFs := true;
HLock(paramPtr^.params[3]);
p := paramPtr^.params[3]^; { Second parameter is string to send. }
if portNumber = 1 then outPort := -7
else outPort := -9;
linefeedByte := linefeed;
while p^ <> 0 do
begin
l := 1;
if FSWrite(outPort,l,p) <> noErr then Fail('FSWrite failed');
if l <> 1 then Fail('not all characters sent');
if sendLFs and (p^ = return) then
begin
l := 1;
if FSWrite(outPort,l,@linefeedByte) <> noErr then Fail('FSWrite failed');
if l <> 1 then Fail('not all characters sent');
end;
p := ptr(ord4(p)+1);
end;
HUnlock(paramPtr^.params[3]);
end;
end.